package com.kmxd.ams.core.common.bo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 登录用户
 *
 * @author admin
 */
@Data
public class LoginUser implements Serializable {

  private static final long serialVersionUID = 1L;

  /** token */
  private String token;

  /** 用户平台 */
  private String userPlatform;

  /** 授权类型 */
  private String grantType;

  /** 系统用户 */
  private SysUserBO sysUser;

  /** 前端用户 */
  private AppMemberBO appMemberBO;

  /** 用户名 */
  private String username;

  /** 登录时间 */
  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  private Date loginTime;

  /** 登录IP地址 */
  private String ipAddress;

  /** 登录地点 */
  private String loginLocation;

  /** 浏览器类型 */
  private String browser;

  /** 操作系统 */
  private String os;

  /** 权限列表 */
  private Set<String> permissions;

  /** 用户ID，可通过sysUser获取 */
  private String userId;

  /** 用户姓名，可通过sysUser获取 */
  private String realName;

  /** 用户头像，可通过sysUser获取 */
  private String avatar;

  /** 用户角色，可通过sysUser获取 */
  private List<SysRoleBO> roles;

  /** 当前单位Id */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long cropId;

  /** 当前单位名称 */
  private String cropName;

  /** 当前用户部门 */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long deptId;

  /** 当前用户部门名称 */
  private String deptName;

  /** 当前全宗 */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long fondsId;

  /** 自增序号用于切换电子文件表,不能添加JsonSerialize */
  private Integer indexNum;

  /** 当前全宗名称 */
  private String fondsName;

  /** 当前全宗Code */
  private String fondsCode;

  /** 当前角色 */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long roleId;

  /** 角色类型 个人级，部门级，公司级 */
  private Integer roleType;

  /** 前端界面在归档库宗是否可编辑新增控制，0都可以操作，1只在待整理中可编辑新增 */
  @JsonSerialize(using = ToStringSerializer.class)
  private Integer archAddBtnControl;

  /** 当前角色名称 */
  private String roleName;

  private String langCode;

  /** 当前用户的原始单位，切换后退回使用当前单位 */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long userCropId;

  /** 当前用户的原始角色 */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long userRoleId;
}
